perm filename PAVEL[F8,ALS] blob
sn#307785 filedate 1977-10-04 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 *************************
C00011 ENDMK
Cā;
*************************
*JOYSTICK TES *
*************************
*
*
*
*******************************************
* *
* DECLARATIONS *
* *
*******************************************
*
*
XUEQU H'0'
XL EQU H'1'
YU EQU H'2'
YL EQU H'3'
HU EQU H'A'
HL EQU H'B'
*
*UM1 REGISTERS*
***************
COM EQU H'8F7'
ZOOM EQU H'8F6'
BGRN EQU H'8F5'
YOFF EQU H'8F4'
XOFF EQU H'8F3'
FMOD EQU H'8F2'
TXT EQU H'8F1'
YINT EQU H'8F0'
*
XFRZ EQU H'8F8'
YFRZ EQU H'8F9'
ODD EQU H'8FA'
YCUR EQU H'8FB'
*
RPL EQU H'800'
RPH EQU H'810'
DELX EQU H'820'
DELY EQU H'830'
XV EQU H'840'
YVLA EQU H'850'
YVLB EQU H'860'
YXA EQU H'870'
YXB EQU H'880'
*
*UM1 REGISTER BITS*
*******************
SELA EQU H'40'
INT EQU H'08'
ENB EQU H'04'
FRZ EQU H'02'
RED EQU H'80' FOR OBJECTS ONLY!
GRN EQU H'40'
BLU EQU H'20'
COPY EQU H'80'
HI EQU H'40'
LO EQU H'00'
RB EQU H'01' FOR BACKGROUND ONLY!
GB EQU H'02'
BB EQU H'04'
HIB EQU H'10'
LOB EQU H'00'
*
*PROGRAM CONSTANTS
******************
SUB EQU 39 SCREEN UPPER BOUNDARY
SLB EQU 22 SCREEN LEFT BOUNDARY
*
UPFL EQU H'80' UPDATE FLAG
LTER EQU -1 LONG UPDATE TERMINATOR
STER EQU -2 SHORT UPDATE TERMINATOR
EVNF EQU -3 EVEN FIELD MARKER
NOBJ EQU 1 NUMBER OF OBJECTS
*
*PROGRAM VARIABLES*
*******************
PST1 EQU H'8'
TEMP EQU HU
*
*MEMORY ALLOCATION*
*******************
BASE EQU H'1800' LOADING ORIGIN
RAM EQU H'0C00' RAM
PCOM EQU RAM
JOYT EQU PCOM+1
DATU EQU JOYT+32
XVU EQU DATU+5
YVU EQU XVU+2
*
*******************************************
* *
* MAIN PROGRAM *
* *
*
*INITIALIZE*
************
?RG H'1800'
*
DI DISABLE CPU INTERRUP
CLR
OUTS 1 DISABLE JOYSTICKS
OUTS 6 DISABLE PSU
OUTS H'E' DISABLE SMI
*
*INITIALIZE VARIABLES
LR PST1,A PST1 <= 0
DCI PCOM
ST PCOM <= 0
*
*INITIALIZE JOYSTICK TABLE
DCI JOYT
LIS 8
LR HU,A
INIT LI 851: MAXIMUM
ST
LI 851.
ST
LI 575: MINIMUM
ST
LI 575.
ST
DS HU
BNZ INIT
*
*ZERO UM-1 WRITE ONLY REGISTERS
DCI YINT
LIS COM-YINT
LR TEMP,A
PI ZERO
*
*CLEAR UM-1 READ/WRITE REGISTERS
DCI RPL
LI H'90'
LR TEMP,A
PI CLER
*
*MOVE INITIAL DATA INTO RAM
DCI DATU
XDC
DCI DAT0
LI NOBJ+NOBJ+NOBJ+NOBJ+NOBJ+NOBJ+NOBJ+11
LR TEMP,A
PI MOVE
*
*LOAD UM-1 READ/WRITE REGISTER AND DISPLAY
DCI DATU INITIALIZE UM-1 REGISTERS
PI UPDT
CLR
LR TEMP,A SYNC ON LINE 0
PI SYNC
LI SELA+ENB
DCI COM SELECT LIST A AND
ST ENABLE UM-1
DCI PCOM
ST SET PROGRAM COPY OF COM
*
*MAIN LOOP
LOOP LIS 8
LR HU,A SYNC ON LINE 8
PI SYNC
CLR SET X-VALUE TO
LR QU,A 3/4*READING+H'13'
LR HU,A
LR A,XU
LR QL,A
LR HL,A
PI AD
PI AD
LR A,QU
SL 1
SL 1
SL 4
LR HU,A
LR A,QL
SR 1
SR 1
XS HU
AI H'13'
DCI XVU
ST
LR A,XL SET Y-VALUE TO
AI H'27' READING+H'27'
DCI YVU
ST
DCI DATU UPDATE UM-1 REGISTERS
PI UPDT
LIS RB+LOB CHANGE BGRN TO RED
DCI BGRN
ST
LIS 0 SELECT POT
LR HU,A
PI JOYI READ POT
LR XL,A SAVE READING
LIS GB+LOB CHANGE BGRN TO GREEN
DCI BGRN
ST
LIS 1 SELECT NEXT POT
LR HU,A
PI JOYI READ POT
LR XU,A SAVE READING
CLR CLEAR BACKGROUND
DCI BGRN
ST
BR LOOP GO BACK
*******************************************
* *
* SUBROUTINES *
* *
*******************************************
*
*CLEAR UM-1 REGISTERS*
**********************
CLER LI H'FF' REPEAT [
ST MEM(DC0++) <= H'FF'
DS TEMP TEMP <= TEMP-1]
BNZ *-2 UNTIL TEMP=0
POP RETURN
*
*MOVE DATA IN MEMORY*
*********************
MOVE LR K,P
LM
XDC
ST REPEAT [
XDC MEM(DC1++) <= MEM(DC0)
DS TEMP TEMP <= TEMP-1]
BNZ MOVE+1 UNTIL TEMP=0
PK RETURN
*
*ZERO MEMORY*
*************
ZERO CLR REPEAT [
ST MEM(DC0++) <= 0
DS TEMP TEMP <= TEMP-1
BNZ *-2 UNTIL TEMP=0
POP RETURN
*
*SYNC ON A GIVEN LINE .GT. 7*
***************************
SYNC LR K,P
LR A,TEMP
DCI YCUR
CM REPEAT []
BNZ *-4 UNTIL YCUR=TEMP
PK RETURN
*
*UPDATE ROUTINE*
****************
UPDT LR K,P
UPD0 LM REPEAT [
LR TEMP,A TEMP <= MEM(DC0++)
UPD1CI LTER IF TEMP=LTER [
BNZ UPD2
LR A,PST1
OI UPFL UPFL <= 1
LR PST1,A RETURN
PK ]
UPD2 CI STER ]
BNZ UPD3 ELSEIF TEMP=STER [
CLR IF UPFL=1 [
XS PST1 RETURN
BP UPD0 ]
PK ]
UPD3 LR A,TEMP
CI EVNF
BNZ UPD4 ELSIIF TEMP=ODDF [
XDC
DCI ODD
LM ACC <= MEM(DC0++)
NS PST1
XDC IF FLD=ODD
LM AND UPFL=SHRT [
BP *+3 DC0<=DC0+ACC
ADC ]
BR UPD0 ]
UPD4 LR A,TEMP ELSE [
XDC
DCI RPL
ADC
XDC DC1 <= RPL+TEMP
LI NOBJ MOVE(DC0,DC1,
LR TEMP,A NOBJ)
LM
XDC
ST
XDC
DS TEMP
BNZ *-5 ]
BR UPD0 ]